package edu.client;

import java.util.Set;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;

import edu.client.IngenieriaService.IngenieriaService;
import edu.client.IngenieriaService.IngenieriaServiceAsync;
import edu.shared.DTO.OrdenFabricacionGeneralDTO;
import edu.shared.DTO.RenglonOrdenFabricacionGeneralDTO;

public class P_DetalleOrdenFabricacion extends PopupPanel {
	
	private static final int COL_NOMBRE_CLIENTE = 0;
	private static final int COL_CANTIDAD_PRODUCIR = 1;
	private static final int COL_FECHA_ESTIMADA_INICIO = 2;
	private static final int COL_FECHA_ESTIMADA_FINALIZACION = 3;
	
	private FlexTable ftRenglones;
	
	private OrdenFabricacionGeneralDTO orden;
	private Set<RenglonOrdenFabricacionGeneralDTO> renglones;
	
	public P_DetalleOrdenFabricacion(OrdenFabricacionGeneralDTO ordenDTO)
	{
		orden = ordenDTO;
		
		setStyleName("fondoPopup");
		
		LayoutPanel layoutPanel = new LayoutPanel();
		setWidget(layoutPanel);
		layoutPanel.setSize("1200px", "660px");
		
		DateTimeFormat formatoFecha = DateTimeFormat.getFormat("dd/MM/yyyy");
		
		Label lblDetalleOrdenFabricacion = new Label("DETALLE DE LA ORDEN DE FABRICACIÓN");
		lblDetalleOrdenFabricacion.setStyleName("labelTitulo");
		layoutPanel.add(lblDetalleOrdenFabricacion);
		layoutPanel.setWidgetLeftWidth(lblDetalleOrdenFabricacion, 2.5, Unit.PCT, 95.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblDetalleOrdenFabricacion, 15.0, Unit.PX, 50.0, Unit.PX);
		
		Label lblNroOrden = new Label("N° ORDEN DE FABRICACIÓN:");
		lblNroOrden.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		lblNroOrden.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(lblNroOrden);
		layoutPanel.setWidgetLeftWidth(lblNroOrden, 1.0, Unit.PCT, 16.3, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblNroOrden, 80.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox nroOrdenTB = new TextBox();
		nroOrdenTB.setText(String.valueOf(orden.getNroOrden()));
		layoutPanel.add(nroOrdenTB);
		layoutPanel.setWidgetLeftWidth(nroOrdenTB, 17.5, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(nroOrdenTB, 75.0, Unit.PX, 32.0, Unit.PX);
		nroOrdenTB.setEnabled(false);
		
		Label lblOrdenPedido = new Label("N° ORDEN PEDIDO ASOCIADA:");
		lblOrdenPedido.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		lblOrdenPedido.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(lblOrdenPedido);
		layoutPanel.setWidgetLeftWidth(lblOrdenPedido, 49.0, Unit.PCT, 20.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblOrdenPedido, 80.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox nroOrdenPedidoTB = new TextBox();
		nroOrdenPedidoTB.setText(String.valueOf(orden.getOrdenPedidoDTO().getNroOrden()));
		layoutPanel.add(nroOrdenPedidoTB);
		layoutPanel.setWidgetLeftWidth(nroOrdenPedidoTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(nroOrdenPedidoTB, 75.0, Unit.PX, 32.0, Unit.PX);
		nroOrdenPedidoTB.setEnabled(false);
		
		Label lblResponsable = new Label("RESPONSABLE:");
		lblResponsable.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		lblResponsable.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(lblResponsable);
		layoutPanel.setWidgetLeftWidth(lblResponsable, 4.0, Unit.PCT, 13.3, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblResponsable, 115.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox responsableTB = new TextBox();
		responsableTB.setText(orden.getResponsable().toUpperCase());
		layoutPanel.add(responsableTB);
		layoutPanel.setWidgetLeftWidth(responsableTB, 17.5, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(responsableTB, 110.0, Unit.PX, 32.0, Unit.PX);
		responsableTB.setEnabled(false);
		
		Label lblFechaGeneracion = new Label("FECHA GENERACIÓN:");
		lblFechaGeneracion.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		lblFechaGeneracion.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(lblFechaGeneracion);
		layoutPanel.setWidgetLeftWidth(lblFechaGeneracion, 49.0, Unit.PCT, 20.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblFechaGeneracion, 115.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox fechaGeneracionTB = new TextBox();
		if(orden.getFechaGeneracion() != null)
			fechaGeneracionTB.setText(formatoFecha.format(orden.getFechaGeneracion()));
		layoutPanel.add(fechaGeneracionTB);
		layoutPanel.setWidgetLeftWidth(fechaGeneracionTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(fechaGeneracionTB, 110.0, Unit.PX, 32.0, Unit.PX);
		fechaGeneracionTB.setEnabled(false);
		
		Label lblFechaInicio = new Label("FECHA ESTIMADA INICIO:");
		lblFechaInicio.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		lblFechaInicio.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(lblFechaInicio);
		layoutPanel.setWidgetLeftWidth(lblFechaInicio, 4.0, Unit.PCT, 13.3, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblFechaInicio, 150.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox fechaInicioTB = new TextBox();
		if(orden.getFechaPrevistaInicio() != null)
			fechaInicioTB.setText(formatoFecha.format(orden.getFechaPrevistaInicio()));
		layoutPanel.add(fechaInicioTB);
		layoutPanel.setWidgetLeftWidth(fechaInicioTB, 17.5, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(fechaInicioTB, 145.0, Unit.PX, 32.0, Unit.PX);
		fechaInicioTB.setEnabled(false);
		
		Label lblFechaEstimadaFinalizacion = new Label("FECHA ESTIMADA FINALIZACIÓN:");
		lblFechaEstimadaFinalizacion.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		lblFechaEstimadaFinalizacion.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(lblFechaEstimadaFinalizacion);
		layoutPanel.setWidgetLeftWidth(lblFechaEstimadaFinalizacion, 49.0, Unit.PCT, 20.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblFechaEstimadaFinalizacion, 150.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox fechaEstimadaFinalizacionTB = new TextBox();
		if(orden.getFechaPrevistaFinalizacion() != null)
			fechaEstimadaFinalizacionTB.setText(formatoFecha.format(orden.getFechaPrevistaFinalizacion()));
		layoutPanel.add(fechaEstimadaFinalizacionTB);
		layoutPanel.setWidgetLeftWidth(fechaEstimadaFinalizacionTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(fechaEstimadaFinalizacionTB, 145.0, Unit.PX, 32.0, Unit.PX);
		fechaEstimadaFinalizacionTB.setEnabled(false);
		
		Label lblEstado = new Label("ESTADO:");
		lblEstado.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		lblEstado.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(lblEstado);
		layoutPanel.setWidgetLeftWidth(lblEstado, 4.0, Unit.PCT, 13.3, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblEstado, 185.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox estadoTB = new TextBox();
		estadoTB.setText(orden.getEstado());
		layoutPanel.add(estadoTB);
		layoutPanel.setWidgetLeftWidth(estadoTB, 17.5, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(estadoTB, 180.0, Unit.PX, 32.0, Unit.PX);
		estadoTB.setEnabled(false);
		
		Label observacionesLabel = new Label("OBSERVACIONES:");
		observacionesLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		observacionesLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(observacionesLabel);
		layoutPanel.setWidgetLeftWidth(observacionesLabel, 4.0, Unit.PCT, 13.3, Unit.PCT);
		layoutPanel.setWidgetTopHeight(observacionesLabel, 225.0, Unit.PX, 19.0, Unit.PX);
		
		TextArea observacionesTA = new TextArea();
		layoutPanel.add(observacionesTA);
		layoutPanel.setWidgetLeftWidth(observacionesTA, 17.5, Unit.PCT, 77.5, Unit.PCT);
		layoutPanel.setWidgetTopHeight(observacionesTA, 215.0, Unit.PX, 47.0, Unit.PX);
		if(orden.getObservaciones() != null)
			observacionesTA.setText(orden.getObservaciones());
		observacionesTA.setEnabled(false);
		
		Label lblEquiposYComponentes = new Label("EQUIPOS Y COMPONENTES SOLICITADOS");
		lblEquiposYComponentes.setStyleName("labelTitulo");
		layoutPanel.add(lblEquiposYComponentes);
		layoutPanel.setWidgetLeftWidth(lblEquiposYComponentes, 2.5, Unit.PCT, 95.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblEquiposYComponentes, 280.0, Unit.PX, 50.0, Unit.PX);
		
		ScrollPanel spEquiposYComponentes = new ScrollPanel();
		spEquiposYComponentes.setStyleName("tabla");
		layoutPanel.add(spEquiposYComponentes);
		layoutPanel.setWidgetLeftWidth(spEquiposYComponentes, 5.0, Unit.PCT, 90.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(spEquiposYComponentes, 340.0, Unit.PX, 250.0, Unit.PX);
		
		ftRenglones = new FlexTable();
		spEquiposYComponentes.setWidget(ftRenglones);
		ftRenglones.setSize("100%", "100%");
		
		//cargamos el encabezado de la tabla	
		// columna nombre para el cliente
		ftRenglones.setText(0, COL_NOMBRE_CLIENTE, "NOMBRE PARA CLIENTE");
		ftRenglones.getCellFormatter().setWidth(0, COL_NOMBRE_CLIENTE, "25%");
		
		// columna cantidad a producir
		ftRenglones.setText(0, COL_CANTIDAD_PRODUCIR, "CANTIDAD A PRODUCIR");
		ftRenglones.getCellFormatter().setWidth(0, COL_CANTIDAD_PRODUCIR, "25%");
		
		// columna fecha estimada de inicio
		ftRenglones.setText(0, COL_FECHA_ESTIMADA_INICIO, "FECHA ESTIMADA INICIO");
		ftRenglones.getCellFormatter().setWidth(0, COL_FECHA_ESTIMADA_INICIO, "25%");
		
		// columna fecha estimada de finalización
		ftRenglones.setText(0, COL_FECHA_ESTIMADA_FINALIZACION, "FECHA ESTIMADA FINALIZACION");
		ftRenglones.getCellFormatter().setWidth(0, COL_FECHA_ESTIMADA_FINALIZACION, "25%");
		
		Button btnSalir = new Button("New button");
		btnSalir.setText("SALIR");
		
		//cuando se presiona el botón salir
		btnSalir.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				salir();
			}
		});
		
		layoutPanel.add(btnSalir);
		layoutPanel.setWidgetRightWidth(btnSalir, 5.0, Unit.PCT, 10.0, Unit.PCT);
		layoutPanel.setWidgetBottomHeight(btnSalir, 21.0, Unit.PX, 28.0, Unit.PX);
		
		Label lblPie = new Label("");
		lblPie.setStyleName("labelTitulo");
		layoutPanel.add(lblPie);
		layoutPanel.setWidgetLeftWidth(lblPie, 2.5, Unit.PCT, 95.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblPie, 550.0, Unit.PX, 50.0, Unit.PX);
					
		// seteamos el estilo a los encabezados
		ftRenglones.getRowFormatter().addStyleName(0, "tablaEncabezado");

		cargarRenglones();
	}
	
	private void cargarRenglones()
	{
		IngenieriaServiceAsync ingenieria = GWT.create(IngenieriaService.class);
		
		ingenieria.buscarRenglonesOrdenFabricacion(orden.getNroOrden(), new AsyncCallback<Set<RenglonOrdenFabricacionGeneralDTO>>()
		{

			@Override
			public void onFailure(Throwable caught) {
				Window.alert("ERROR EN EL SERIVICIO." + '\n' + '\n' + caught.getMessage());
					
			}

			@Override
			public void onSuccess(Set<RenglonOrdenFabricacionGeneralDTO> result) {
				renglones = result;
				
				//se utiliza para formatear fechas
				DateTimeFormat formatoFecha = DateTimeFormat.getFormat("dd/MM/yyyy");
				
				int numeroFila = 1;
				
				// cargamos las órdenes a la tabla
				for(RenglonOrdenFabricacionGeneralDTO renglon : renglones){		
														
					// columna nombre para el cliente
					ftRenglones.setWidget(numeroFila, COL_NOMBRE_CLIENTE, new Label(renglon.getRenglonOrdenPedidoDTO().getNombre()));
					ftRenglones.getCellFormatter().setWordWrap(numeroFila, COL_NOMBRE_CLIENTE, true);
			
					// columna cantidad a producir
					ftRenglones.setWidget(numeroFila, COL_CANTIDAD_PRODUCIR, new Label(String.valueOf(renglon.getCantidadAProducir())));
					ftRenglones.getCellFormatter().setWordWrap(numeroFila, COL_CANTIDAD_PRODUCIR, true);
					
					// columna fecha estimada de inicio
					ftRenglones.setWidget(numeroFila, COL_FECHA_ESTIMADA_INICIO, new Label(String.valueOf(formatoFecha.format(renglon.getFechaEstimadaInicio()))));
					ftRenglones.getCellFormatter().setWordWrap(numeroFila, COL_FECHA_ESTIMADA_INICIO, true);
						
					// columna fecha estimada de finalización
					ftRenglones.setWidget(numeroFila, COL_FECHA_ESTIMADA_FINALIZACION, new Label(String.valueOf(formatoFecha.format(renglon.getFechaEstimadaFinalizacion()))));
					ftRenglones.getCellFormatter().setWordWrap(numeroFila, COL_FECHA_ESTIMADA_FINALIZACION, true);
								
					//seteamos el estilo de renglón de tabla
					ftRenglones.getRowFormatter().setStyleName(numeroFila, "tablaRenglon");
					
					numeroFila++;
				}	
			}	
		});
	}
	
	private void salir()
	{
		//cerramos el popup
		this.hide();
	}
}
